package org.upo.eps.it.phama.struts.actionform;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.upo.eps.it.phama.bean.Cliente;
import org.upo.eps.it.phama.bean.DetallePedCli;
import org.upo.eps.it.phama.bean.Estado;
import org.upo.eps.it.phama.bean.PedidoCliente;
import org.upo.eps.it.phama.bean.Producto;
import org.upo.eps.it.phama.dao.ClienteDAO;
import org.upo.eps.it.phama.dao.EstadoDAO;
import org.upo.eps.it.phama.dao.ProductoDAO;

/**
 *
 * @author grupo 4
 */
public class PedidosClienteActionForm extends ActionForm {

    private String opcion;
    private int id;
    private String fecha;
    private String notas;
    private int estado;
    private int idCliente;
    private int idProducto;
    private int cantidad;
    private int idDetalle;
    private List<PedidoCliente> resultadoBusqueda;
    private List<Cliente> misClientes;
    private List<Estado> misEstados;
    private List<DetallePedCli> detallePedido;
    private List<Producto> misProductos;

    //<editor-fold defaultstate="collapsed" desc="constructors">
    public PedidosClienteActionForm() {
        super();
        misClientes = ClienteDAO.getCliente();
        misEstados = EstadoDAO.getEstados();
        misProductos = ProductoDAO.getProductos();
        opcion = "";
    }

    //</editor-fold>
    //<editor-fold defaultstate="collapsed" desc="getters & setters">
    public String getOpcion() {
        return opcion;
    }

    public void setOpcion(String opcion) {
        this.opcion = opcion;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public String getNotas() {
        return notas;
    }

    public void setNotas(String notas) {
        this.notas = notas;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public int getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(int idCliente) {
        this.idCliente = idCliente;
    }

    public int getIdProducto() {
        return idProducto;
    }

    public void setIdProducto(int idProducto) {
        this.idProducto = idProducto;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    public int getIdDetalle() {
        return idDetalle;
    }

    public void setIdDetalle(int idDetalle) {
        this.idDetalle = idDetalle;
    }

    public List<PedidoCliente> getResultadoBusqueda() {
        return resultadoBusqueda;
    }

    public void setResultadoBusqueda(List<PedidoCliente> resultadoBusqueda) {
        this.resultadoBusqueda = resultadoBusqueda;
    }

    public List<Cliente> getMisClientes() {
        return misClientes;
    }

    public void setMisClientes(List<Cliente> misClientes) {
        this.misClientes = misClientes;
    }

    public List<Estado> getMisEstados() {
        return misEstados;
    }

    public void setMisEstados(List<Estado> misEstados) {
        this.misEstados = misEstados;
    }

    public List<DetallePedCli> getDetallePedido() {
        return detallePedido;
    }

    public void setDetallePedido(List<DetallePedCli> detallePedido) {
        this.detallePedido = detallePedido;
    }

    public List<Producto> getMisProductos() {
        return misProductos;
    }

    public void setMisProductos(List<Producto> misProductos) {
        this.misProductos = misProductos;
    }

    //</editor-fold>
    @Override
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        HttpSession session = request.getSession();
        detallePedido = (List<DetallePedCli>) session.getAttribute("detallePedido");
        if (detallePedido == null) {
            detallePedido = new ArrayList<>();
        }

    }

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param request The HTTP Request we are processing.
     * @return
     */
    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        switch (opcion) {
            case "grabar":
            case "modificar":
                if (fecha == null || fecha.equals("")) {
                    errors.add("fecha", new ActionMessage("error.required", "fecha"));
                }
                if (idCliente == 0) {
                    errors.add("cliente", new ActionMessage("error.required", "cliente"));
                }
                if (estado == 0) {
                    errors.add("estado", new ActionMessage("error.required", "estado"));
                }
                break;
            case "anadirdetalle":
                if (idProducto == 0) {
                    errors.add("articulo", new ActionMessage("error.required", "art&iacute;culo"));
                }
                if (cantidad == 0) {
                    errors.add("cliente", new ActionMessage("error.required", "cantidad"));
                }
                break;
        }

        return errors;
    }

    /**
     * Busca en la lista de productos aquél que tiene la misma id que el
     * seleccionado en el formulario. El producto encontrado es devuelto. Con
     * esto se evita tener que efectuar una nueva consulta a la base de datos.
     *
     * @return
     */
    public Producto getProductoSeleccionado() {
        Iterator it = misProductos.iterator();
        boolean enc = false;
        Producto result = null;
        while (!enc && it.hasNext()) {
            Producto p = (Producto) it.next();
            if (p.getIdProducto() == this.idProducto) {
                result = p;
                enc = true;
            }
        }
        return result;
    }
}
